package xginxgodb

import (
	"encoding/json"
	"fmt"
	"strings"

	"gitee.com/xiaoyutab/xgotool/https"
	"gitee.com/xiaoyutab/xgotool/xgodb"
	"gitee.com/xiaoyutab/xgotool/xgodb/xgodbconfig"
	"gitee.com/xiaoyutab/xgotool/xstring"
)

// 同步其他站点的配置项信息
func sync_config() {
	// 获取待同步的配置项列表
	conf_list := strings.Split(xgodb.GetString("FRAM_SYNC_URL"), ",")
	aes_list := strings.Split(xgodb.GetString("FRAM_SYNC_URL_AES"), ",")
	for i := 0; i < len(conf_list); i++ {
		// 获取配置项信息
		bodys := https.Get(conf_list[i], map[string]string{
			"urls": xgodb.GetString("FRAM_SYNC_DOMAIN"),
		}, nil).Body
		if strings.ContainsAny(bodys, ".0xffff.") {
			// 配置项获取成功
			lis := strings.Split(bodys, ".0xffff.")
			if len(lis) != 2 {
				fmt.Println("配置项返回格式错误", conf_list[i])
				continue
			}
			// 获取配置项分组信息
			base64_group := xstring.UnBase64Byte(lis[0])
			// AES解密
			aes_group, err := xstring.UnAes(base64_group, []byte(aes_list[i]))
			if err != nil {
				fmt.Println("分组配置项解密失败", conf_list[i], err)
				continue
			}
			group := []xgodbconfig.ConfigureGroup{}
			if err = json.Unmarshal(aes_group, &group); err != nil {
				fmt.Println("分组JSON格式化失败", conf_list[i], err)
				continue
			}
			// 插入数据库中
			if err = xgodbconfig.GroupInserts(group); err != nil {
				fmt.Println("分组插入失败", conf_list[i], err)
				continue
			}
			base64_conf := xstring.UnBase64Byte(lis[1])
			// AES解密
			aes_conf, err := xstring.UnAes(base64_conf, []byte(aes_list[i]))
			if err != nil {
				fmt.Println("配置项列表解密失败", conf_list[i], err)
				continue
			}
			// JSON转化
			conf := []xgodbconfig.Configure{}
			if err = json.Unmarshal(aes_conf, &conf); err != nil {
				fmt.Println("配置项JSON格式化失败", conf_list[i], err)
				continue
			}
			// 插入数据库中
			for j := 0; j < len(conf); j++ {
				switch conf[j].Types {
				case "string":
					xgodb.SetString(conf[j].NameKey, conf[j].ValueString)
				case "int":
					xgodb.SetInt(conf[j].NameKey, conf[j].ValueInt)
				case "float":
					xgodb.SetFloat(conf[j].NameKey, conf[j].ValueFloat)
				case "bool":
					xgodb.SetBool(conf[j].NameKey, conf[j].ValueBool == 1)
				case "select":
					xgodb.SetSelect(conf[j].NameKey, conf[j].ValueString)
				case "text":
					xgodb.SetText(conf[j].NameKey, conf[j].ValueString)
				case "longtext":
					xgodb.SetLongText(conf[j].NameKey, conf[j].ValueString)
				}
			}
			fmt.Println("配置项导入完成：", conf_list[i])
		} else {
			// 配置项获取失败
			fmt.Println("配置项获取失败", bodys)
		}
	}
}
